package com.zhilianbao.leyaogo.http.api;

import android.content.Context;

import com.bql.utils.AESOperator;
import com.zhilianbao.leyaogo.constants.HttpConfig;
import com.zhilianbao.leyaogo.http.client.LeYaoGoClient;
import com.zhilianbao.leyaogo.utils.Utils;
import com.zhilianbao.okhttputils.callback.Callback;
import com.zhilianbao.okhttputils.model.JsonParams;

/**
 * ClassName: PayApi <br>
 * Description: 支付相关API<br>
 * Author: Cyarie <br>
 * Created: 2016/11/30 15:13 <br>
 * Update Time：<br>
 * Update Description：<br>
 */
public class PayApi {

    //支付宝支付
    public static final String METHOD_ALI_PAY = "pay/alipay";

    //微信支付
    public static final String METHOD_WEI_PAY = "pay/weixin";

    //获取余额
    public static final String METHOD_GET_MY_BALANCE = "pay/getMyBalance";


    //获取运营商支持的支付方式
    public static final String METHOD_GET_PAY_WAY_LIST = "pay/getPayWayList";


    //全余额支付
    public static final String METHOD_PAY_BY_ACCOUNT = "pay/payByAccount";


    //更新订单状态
    public static final String METHOD_UPDATE_ORDER_STATUS = "pay/updateOrderStatus";

    //设置支付密码
    public static final String METHOD_SET_PAY_PWD = "pay/setPayPassword";

    //修改支付密码
    public static final String METHOD_UPDATE_PAY_PWD = "pay/updatePayPassword";

    //验证支付密码
    public static final String METHOD_VALIDATE_PAY_PWD = "pay/validatePayPassword";

    //是否设置支付密码
    public static final String METHOD_HAS_SET_PAY_PWD = "pay/hasSetPayPassword";


    //忘记、设置支付密码
    public static final String METHOD_FORGET_PAY_PWD = "pay/forgetPayPassword";


    /**
     * 支付宝支付
     *
     * @param context
     * @param supplierId       运营商ID
     * @param userId           用户ID
     * @param userName         用户名
     * @param tradeType        交易业务类型 0消费 1充值
     * @param totalAmount      订单金额
     * @param availableBalance 可用余额 选填
     * @param orderId          订单ID
     * @param orderNo          订单编号
     * @param callback
     */
    public static void alipay(Context context, long supplierId, long userId, String userName, int tradeType, double totalAmount, Double availableBalance, long orderId, String orderNo, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", supplierId);
        jsonParams.put("userId", userId);
        jsonParams.put("userName", userName);
        jsonParams.put("tradeType", tradeType);
        jsonParams.put("totalAmount", totalAmount);
        if (availableBalance != null)
            jsonParams.put("availableBalance", availableBalance);
        jsonParams.put("orderId", orderId);
        jsonParams.put("orderNo", orderNo);
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_ALI_PAY, jsonParams, callback);

    }

    /**
     * 微信支付
     *
     * @param context
     * @param supplierId       运营商ID
     * @param userId           用户ID
     * @param userName         用户名
     * @param tradeType        交易业务类型 0消费 1充值
     * @param totalAmount      订单金额
     * @param availableBalance 可用余额 选填
     * @param orderId          订单ID
     * @param orderNo          订单编号
     * @param callback
     */
    public static void wxpay(Context context, long supplierId, long userId, String userName, int tradeType, double totalAmount, Double availableBalance, long orderId, String orderNo, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", supplierId);
        jsonParams.put("userId", userId);
        jsonParams.put("userName", userName);
        jsonParams.put("tradeType", tradeType);
        jsonParams.put("totalAmount", totalAmount);
        if (availableBalance != null)
            jsonParams.put("availableBalance", availableBalance);
        jsonParams.put("orderId", orderId);
        jsonParams.put("orderNo", orderNo);
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_WEI_PAY, jsonParams, callback);

    }

    /**
     * 获取我的余额详细说明
     *
     * @param context
     * @param supplierId 运营商ID
     * @param userId     用户ID
     * @param callback
     */
    public static void getMyBalance(Context context, long supplierId, long userId, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", supplierId);
        jsonParams.put("userId", userId);
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_GET_MY_BALANCE, jsonParams, callback);

    }

    /**
     * 获取运营商支持的支付方式
     *
     * @param context
     * @param supplierId 运营商ID
     * @param type       0获取运营商支持的第三方支付平台的支付方式 1获取运营商支持的支付方式
     * @param callback
     */
    public static void getPayWayList(Context context, long supplierId, int type, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", supplierId);
        jsonParams.put("type", type);
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_GET_PAY_WAY_LIST, jsonParams, callback);

    }

    /**
     * 全余额支付
     *
     * @param context
     * @param supplierId       运营商ID
     * @param userId           用户ID
     * @param userName         用户名
     * @param tradeType        交易业务类型 0消费 1充值
     * @param totalAmount      订单金额
     * @param availableBalance 可用余额 选填
     * @param orderId          订单ID
     * @param orderNo          订单编号
     * @param callback
     */
    public static void payByAccount(Context context, long supplierId, long userId, String userName, int tradeType, double totalAmount, Double availableBalance, long orderId, String orderNo, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", supplierId);
        jsonParams.put("userId", userId);
        jsonParams.put("userName", userName);
        jsonParams.put("tradeType", tradeType);
        jsonParams.put("totalAmount", totalAmount);
        if (availableBalance != null)
            jsonParams.put("availableBalance", availableBalance);
        jsonParams.put("orderId", orderId);
        jsonParams.put("orderNo", orderNo);
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_PAY_BY_ACCOUNT, jsonParams, callback);

    }

    /**
     * 更新订单状态
     *
     * @param context
     * @param userId   用户ID
     * @param orderNo  订单号 多个以,隔开 ,
     * @param callback
     */
    public static void updateOrderStatus(Context context, long userId, String orderNo, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("userId", userId);
        jsonParams.put("orderNo", orderNo);
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_UPDATE_ORDER_STATUS, jsonParams, callback);

    }


    /**
     * 设置支付密码
     *
     * @param context
     * @param password 支付密码
     * @param callback
     */
    public static void setPayPwd(Context context, String password, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", Utils.getSupplierId());
        jsonParams.put("userId", Utils.getUserLoginInfo().getUserId());
        jsonParams.put("password", AESOperator.encodeMD5(password));
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_SET_PAY_PWD, jsonParams, callback);
    }

    /**
     * 忘记 设置支付密码
     *
     * @param context
     * @param password 支付密码
     * @param callback
     */
    public static void setAndForgetPayPwd(Context context, String password, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", Utils.getSupplierId());
        jsonParams.put("userId", Utils.getUserLoginInfo().getUserId());
        jsonParams.put("password", AESOperator.encodeMD5(password));
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_FORGET_PAY_PWD, jsonParams, callback);
    }


    /**
     * 修改支付密码
     *
     * @param context
     * @param oldPwd   旧密码
     * @param newPwd   新密码
     * @param callback
     */
    public static void updatePayPwd(Context context, String oldPwd, String newPwd, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", Utils.getSupplierId());
        jsonParams.put("userId", Utils.getUserLoginInfo().getUserId());
        jsonParams.put("password", AESOperator.encodeMD5(newPwd));
        jsonParams.put("oldPassword", AESOperator.encodeMD5(oldPwd));
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_UPDATE_PAY_PWD, jsonParams, callback);
    }

    /**
     * 验证支付密码
     *
     * @param context
     * @param password
     * @param callback
     */
    public static void validPayPwd(Context context, String password, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", Utils.getSupplierId());
        jsonParams.put("userId", Utils.getUserLoginInfo().getUserId());
        jsonParams.put("password", AESOperator.encodeMD5(password));
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_VALIDATE_PAY_PWD, jsonParams, callback);
    }


    /**
     * 是否设置过支付密码
     *
     * @param context
     * @param callback
     */
    public static void hasSetPayPwd(Context context, Callback callback) {
        JsonParams jsonParams = new JsonParams();
        jsonParams.put("supplierId", Utils.getSupplierId());
        jsonParams.put("userId", Utils.getUserLoginInfo().getUserId());
        LeYaoGoClient.post(context, HttpConfig.BASE_URL + METHOD_HAS_SET_PAY_PWD, jsonParams, callback);
    }
}
